const models = require(__base + '/models');
const errcode = require(__util + "/errcode")
const ct = require(__util + "/catch"); // 路由错误捕获(不使用则不会捕获异常错误)

module.exports = ct(async (req, res) => {
  const { id, name, code, version, isUsing } = req.body

  // isUsing参数必传, 不传则认为是false
  const data = {
    isUsing: isUsing
  }
  if (name) { data.name = name}
  if (code) { data.code = code }
  if (version) { data.version = version }

  if (!id) {
    return res.json(errcode.PAYMENT_ID_INVALID)
  }

  // 有code时, 判断code只能是英文大小写
  if (code && !(/^[a-zA-Z]*$/g).test(code)) {
    return res.json(errcode.PAYMENT_CODE_INVALID)
  }

  // 异步检查名称和标识是否已存在(排除id自身的数据比较)
  const [checkNameRet, checkCodeRet] = await Promise.all([
    (name) ? models.PaymentMethod.findOne({
      where: {
        name: name,
        id: { $ne: id }
      }
    }) : false
    ,
    (code) ? models.PaymentMethod.findOne({
      where: { 
        code: code,
        id: { $ne: id }
      }
    }) : false
  ])

  if (checkNameRet) {
    return res.json(errcode.PAYMENT_NAME_EXIST)
  }
  if (checkCodeRet) {
    return res.json(errcode.PAYMENT_CODE_EXIST)
  }

  await models.PaymentMethod.update(data, {
    where: {
      id: id
    }
  })

  res.json(
    errcode.SUCCESS()
  );
});


// 成功返回
// {
//   "errcode": 0,
//   "errmsg": "success"
// }